dchelimsky-rspec 1.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. data/History.txt +1192 -0
  2. data/License.txt +22 -0
  3. data/Manifest.txt +403 -0
  4. data/README.txt +39 -0
  5. data/Rakefile +90 -0
  6. data/TODO.txt +10 -0
  7. data/bin/autospec +4 -0
  8. data/bin/spec +4 -0
  9. data/examples/pure/autogenerated_docstrings_example.rb +19 -0
  10. data/examples/pure/before_and_after_example.rb +40 -0
  11. data/examples/pure/behave_as_example.rb +45 -0
  12. data/examples/pure/custom_expectation_matchers.rb +54 -0
  13. data/examples/pure/custom_formatter.rb +12 -0
  14. data/examples/pure/dynamic_spec.rb +9 -0
  15. data/examples/pure/file_accessor.rb +19 -0
  16. data/examples/pure/file_accessor_spec.rb +38 -0
  17. data/examples/pure/greeter_spec.rb +31 -0
  18. data/examples/pure/helper_method_example.rb +14 -0
  19. data/examples/pure/io_processor.rb +8 -0
  20. data/examples/pure/io_processor_spec.rb +21 -0
  21. data/examples/pure/legacy_spec.rb +11 -0
  22. data/examples/pure/mocking_example.rb +27 -0
  23. data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
  24. data/examples/pure/nested_classes_example.rb +36 -0
  25. data/examples/pure/partial_mock_example.rb +29 -0
  26. data/examples/pure/pending_example.rb +20 -0
  27. data/examples/pure/predicate_example.rb +27 -0
  28. data/examples/pure/priority.txt +1 -0
  29. data/examples/pure/shared_example_group_example.rb +81 -0
  30. data/examples/pure/shared_stack_examples.rb +38 -0
  31. data/examples/pure/spec_helper.rb +3 -0
  32. data/examples/pure/stack.rb +36 -0
  33. data/examples/pure/stack_spec.rb +63 -0
  34. data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
  35. data/examples/pure/stubbing_example.rb +69 -0
  36. data/examples/pure/yielding_example.rb +33 -0
  37. data/examples/stories/adder.rb +13 -0
  38. data/examples/stories/addition +34 -0
  39. data/examples/stories/addition.rb +9 -0
  40. data/examples/stories/calculator.rb +65 -0
  41. data/examples/stories/game-of-life/.loadpath +5 -0
  42. data/examples/stories/game-of-life/README.txt +21 -0
  43. data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
  44. data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
  45. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
  46. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
  47. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
  48. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
  49. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
  50. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
  51. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
  52. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
  53. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
  54. data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
  55. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
  56. data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
  57. data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
  58. data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
  59. data/examples/stories/game-of-life/life/game.rb +23 -0
  60. data/examples/stories/game-of-life/life/grid.rb +43 -0
  61. data/examples/stories/game-of-life/life.rb +3 -0
  62. data/examples/stories/helper.rb +9 -0
  63. data/examples/stories/steps/addition_steps.rb +18 -0
  64. data/failing_examples/README.txt +7 -0
  65. data/failing_examples/diffing_spec.rb +36 -0
  66. data/failing_examples/failing_autogenerated_docstrings_example.rb +19 -0
  67. data/failing_examples/failure_in_setup.rb +10 -0
  68. data/failing_examples/failure_in_teardown.rb +10 -0
  69. data/failing_examples/mocking_example.rb +40 -0
  70. data/failing_examples/mocking_with_flexmock.rb +26 -0
  71. data/failing_examples/mocking_with_mocha.rb +25 -0
  72. data/failing_examples/mocking_with_rr.rb +27 -0
  73. data/failing_examples/partial_mock_example.rb +20 -0
  74. data/failing_examples/predicate_example.rb +29 -0
  75. data/failing_examples/raising_example.rb +47 -0
  76. data/failing_examples/spec_helper.rb +3 -0
  77. data/failing_examples/syntax_error_example.rb +7 -0
  78. data/failing_examples/team_spec.rb +44 -0
  79. data/failing_examples/timeout_behaviour.rb +7 -0
  80. data/init.rb +9 -0
  81. data/lib/autotest/discover.rb +3 -0
  82. data/lib/autotest/rspec.rb +46 -0
  83. data/lib/spec/adapters/ruby_engine/mri.rb +8 -0
  84. data/lib/spec/adapters/ruby_engine/rubinius.rb +8 -0
  85. data/lib/spec/adapters/ruby_engine.rb +26 -0
  86. data/lib/spec/adapters.rb +1 -0
  87. data/lib/spec/example/before_and_after_hooks.rb +93 -0
  88. data/lib/spec/example/configuration.rb +167 -0
  89. data/lib/spec/example/errors.rb +30 -0
  90. data/lib/spec/example/example_group.rb +25 -0
  91. data/lib/spec/example/example_group_factory.rb +81 -0
  92. data/lib/spec/example/example_group_methods.rb +368 -0
  93. data/lib/spec/example/example_matcher.rb +44 -0
  94. data/lib/spec/example/example_methods.rb +105 -0
  95. data/lib/spec/example/module_reopening_fix.rb +21 -0
  96. data/lib/spec/example/pending.rb +18 -0
  97. data/lib/spec/example/shared_example_group.rb +52 -0
  98. data/lib/spec/example.rb +12 -0
  99. data/lib/spec/expectations/differs/default.rb +66 -0
  100. data/lib/spec/expectations/errors.rb +12 -0
  101. data/lib/spec/expectations/extensions/object.rb +63 -0
  102. data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  103. data/lib/spec/expectations/extensions.rb +2 -0
  104. data/lib/spec/expectations/handler.rb +52 -0
  105. data/lib/spec/expectations.rb +56 -0
  106. data/lib/spec/extensions/class.rb +24 -0
  107. data/lib/spec/extensions/main.rb +87 -0
  108. data/lib/spec/extensions/metaclass.rb +7 -0
  109. data/lib/spec/extensions/object.rb +6 -0
  110. data/lib/spec/extensions.rb +4 -0
  111. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  112. data/lib/spec/interop/test/unit/testcase.rb +71 -0
  113. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  114. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  115. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  116. data/lib/spec/interop/test.rb +12 -0
  117. data/lib/spec/matchers/be.rb +221 -0
  118. data/lib/spec/matchers/be_close.rb +37 -0
  119. data/lib/spec/matchers/change.rb +148 -0
  120. data/lib/spec/matchers/eql.rb +43 -0
  121. data/lib/spec/matchers/equal.rb +43 -0
  122. data/lib/spec/matchers/exist.rb +22 -0
  123. data/lib/spec/matchers/has.rb +34 -0
  124. data/lib/spec/matchers/have.rb +150 -0
  125. data/lib/spec/matchers/include.rb +77 -0
  126. data/lib/spec/matchers/match.rb +41 -0
  127. data/lib/spec/matchers/operator_matcher.rb +79 -0
  128. data/lib/spec/matchers/raise_error.rb +132 -0
  129. data/lib/spec/matchers/respond_to.rb +46 -0
  130. data/lib/spec/matchers/satisfy.rb +47 -0
  131. data/lib/spec/matchers/simple_matcher.rb +132 -0
  132. data/lib/spec/matchers/throw_symbol.rb +74 -0
  133. data/lib/spec/matchers.rb +162 -0
  134. data/lib/spec/mocks/argument_constraints.rb +165 -0
  135. data/lib/spec/mocks/argument_expectation.rb +49 -0
  136. data/lib/spec/mocks/error_generator.rb +84 -0
  137. data/lib/spec/mocks/errors.rb +10 -0
  138. data/lib/spec/mocks/extensions/object.rb +3 -0
  139. data/lib/spec/mocks/extensions.rb +1 -0
  140. data/lib/spec/mocks/framework.rb +15 -0
  141. data/lib/spec/mocks/message_expectation.rb +331 -0
  142. data/lib/spec/mocks/methods.rb +51 -0
  143. data/lib/spec/mocks/mock.rb +56 -0
  144. data/lib/spec/mocks/order_group.rb +29 -0
  145. data/lib/spec/mocks/proxy.rb +224 -0
  146. data/lib/spec/mocks/space.rb +28 -0
  147. data/lib/spec/mocks/spec_methods.rb +46 -0
  148. data/lib/spec/mocks.rb +200 -0
  149. data/lib/spec/rake/spectask.rb +227 -0
  150. data/lib/spec/rake/verify_rcov.rb +52 -0
  151. data/lib/spec/runner/backtrace_tweaker.rb +56 -0
  152. data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
  153. data/lib/spec/runner/command_line.rb +17 -0
  154. data/lib/spec/runner/drb_command_line.rb +20 -0
  155. data/lib/spec/runner/example_group_runner.rb +59 -0
  156. data/lib/spec/runner/formatter/base_formatter.rb +79 -0
  157. data/lib/spec/runner/formatter/base_text_formatter.rb +126 -0
  158. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
  159. data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
  160. data/lib/spec/runner/formatter/html_formatter.rb +337 -0
  161. data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
  162. data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
  163. data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
  164. data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
  165. data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
  166. data/lib/spec/runner/formatter/story/html_formatter.rb +174 -0
  167. data/lib/spec/runner/formatter/story/plain_text_formatter.rb +194 -0
  168. data/lib/spec/runner/formatter/story/progress_bar_formatter.rb +42 -0
  169. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  170. data/lib/spec/runner/heckle_runner.rb +72 -0
  171. data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
  172. data/lib/spec/runner/option_parser.rb +205 -0
  173. data/lib/spec/runner/options.rb +320 -0
  174. data/lib/spec/runner/reporter.rb +167 -0
  175. data/lib/spec/runner/spec_parser.rb +71 -0
  176. data/lib/spec/runner.rb +213 -0
  177. data/lib/spec/story/extensions/main.rb +86 -0
  178. data/lib/spec/story/extensions/regexp.rb +9 -0
  179. data/lib/spec/story/extensions/string.rb +9 -0
  180. data/lib/spec/story/extensions.rb +3 -0
  181. data/lib/spec/story/given_scenario.rb +14 -0
  182. data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
  183. data/lib/spec/story/runner/scenario_collector.rb +18 -0
  184. data/lib/spec/story/runner/scenario_runner.rb +54 -0
  185. data/lib/spec/story/runner/story_mediator.rb +137 -0
  186. data/lib/spec/story/runner/story_parser.rb +247 -0
  187. data/lib/spec/story/runner/story_runner.rb +70 -0
  188. data/lib/spec/story/runner.rb +59 -0
  189. data/lib/spec/story/scenario.rb +14 -0
  190. data/lib/spec/story/step.rb +70 -0
  191. data/lib/spec/story/step_group.rb +89 -0
  192. data/lib/spec/story/step_mother.rb +38 -0
  193. data/lib/spec/story/story.rb +39 -0
  194. data/lib/spec/story/world.rb +128 -0
  195. data/lib/spec/story.rb +10 -0
  196. data/lib/spec/version.rb +13 -0
  197. data/lib/spec.rb +32 -0
  198. data/plugins/mock_frameworks/flexmock.rb +23 -0
  199. data/plugins/mock_frameworks/mocha.rb +19 -0
  200. data/plugins/mock_frameworks/rr.rb +21 -0
  201. data/plugins/mock_frameworks/rspec.rb +20 -0
  202. data/rake_tasks/examples.rake +7 -0
  203. data/rake_tasks/examples_with_rcov.rake +9 -0
  204. data/rake_tasks/failing_examples_with_html.rake +9 -0
  205. data/rake_tasks/verify_rcov.rake +7 -0
  206. data/rspec.gemspec +42 -0
  207. data/spec/README.jruby +15 -0
  208. data/spec/autotest/autotest_helper.rb +6 -0
  209. data/spec/autotest/autotest_matchers.rb +47 -0
  210. data/spec/autotest/discover_spec.rb +19 -0
  211. data/spec/autotest/rspec_spec.rb +150 -0
  212. data/spec/rspec_suite.rb +6 -0
  213. data/spec/ruby_forker.rb +13 -0
  214. data/spec/spec/adapters/ruby_engine_spec.rb +16 -0
  215. data/spec/spec/example/configuration_spec.rb +296 -0
  216. data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
  217. data/spec/spec/example/example_group_factory_spec.rb +165 -0
  218. data/spec/spec/example/example_group_methods_spec.rb +584 -0
  219. data/spec/spec/example/example_group_spec.rb +683 -0
  220. data/spec/spec/example/example_matcher_spec.rb +96 -0
  221. data/spec/spec/example/example_methods_spec.rb +169 -0
  222. data/spec/spec/example/example_runner_spec.rb +194 -0
  223. data/spec/spec/example/nested_example_group_spec.rb +71 -0
  224. data/spec/spec/example/pending_module_spec.rb +145 -0
  225. data/spec/spec/example/predicate_matcher_spec.rb +21 -0
  226. data/spec/spec/example/shared_example_group_spec.rb +281 -0
  227. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  228. data/spec/spec/expectations/differs/default_spec.rb +127 -0
  229. data/spec/spec/expectations/extensions/object_spec.rb +95 -0
  230. data/spec/spec/expectations/fail_with_spec.rb +71 -0
  231. data/spec/spec/extensions/main_spec.rb +71 -0
  232. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  233. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  234. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  235. data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
  236. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  237. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  238. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  239. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  240. data/spec/spec/interop/test/unit/spec_spec.rb +52 -0
  241. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
  242. data/spec/spec/interop/test/unit/testcase_spec.rb +49 -0
  243. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  244. data/spec/spec/matchers/be_close_spec.rb +39 -0
  245. data/spec/spec/matchers/be_spec.rb +248 -0
  246. data/spec/spec/matchers/change_spec.rb +329 -0
  247. data/spec/spec/matchers/description_generation_spec.rb +153 -0
  248. data/spec/spec/matchers/eql_spec.rb +28 -0
  249. data/spec/spec/matchers/equal_spec.rb +28 -0
  250. data/spec/spec/matchers/exist_spec.rb +57 -0
  251. data/spec/spec/matchers/handler_spec.rb +150 -0
  252. data/spec/spec/matchers/has_spec.rb +63 -0
  253. data/spec/spec/matchers/have_spec.rb +394 -0
  254. data/spec/spec/matchers/include_spec.rb +64 -0
  255. data/spec/spec/matchers/match_spec.rb +37 -0
  256. data/spec/spec/matchers/matcher_methods_spec.rb +78 -0
  257. data/spec/spec/matchers/mock_constraint_matchers_spec.rb +24 -0
  258. data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
  259. data/spec/spec/matchers/raise_error_spec.rb +315 -0
  260. data/spec/spec/matchers/respond_to_spec.rb +54 -0
  261. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  262. data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
  263. data/spec/spec/matchers/throw_symbol_spec.rb +54 -0
  264. data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
  265. data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
  266. data/spec/spec/mocks/at_least_spec.rb +97 -0
  267. data/spec/spec/mocks/at_most_spec.rb +93 -0
  268. data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
  269. data/spec/spec/mocks/bug_report_10263_spec.rb +24 -0
  270. data/spec/spec/mocks/bug_report_11545_spec.rb +33 -0
  271. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  272. data/spec/spec/mocks/bug_report_496.rb +17 -0
  273. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  274. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  275. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  276. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  277. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +95 -0
  278. data/spec/spec/mocks/hash_including_matcher_spec.rb +53 -0
  279. data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
  280. data/spec/spec/mocks/mock_space_spec.rb +54 -0
  281. data/spec/spec/mocks/mock_spec.rb +555 -0
  282. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  283. data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
  284. data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
  285. data/spec/spec/mocks/once_counts_spec.rb +53 -0
  286. data/spec/spec/mocks/options_hash_spec.rb +35 -0
  287. data/spec/spec/mocks/partial_mock_spec.rb +149 -0
  288. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
  289. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +130 -0
  290. data/spec/spec/mocks/precise_counts_spec.rb +52 -0
  291. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  292. data/spec/spec/mocks/stub_spec.rb +188 -0
  293. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  294. data/spec/spec/package/bin_spec_spec.rb +22 -0
  295. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  296. data/spec/spec/runner/command_line_spec.rb +141 -0
  297. data/spec/spec/runner/drb_command_line_spec.rb +97 -0
  298. data/spec/spec/runner/empty_file.txt +0 -0
  299. data/spec/spec/runner/examples.txt +2 -0
  300. data/spec/spec/runner/failed.txt +3 -0
  301. data/spec/spec/runner/formatter/base_formatter_spec.rb +112 -0
  302. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  303. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
  304. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
  305. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
  306. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
  307. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
  308. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +370 -0
  309. data/spec/spec/runner/formatter/html_formatter_spec.rb +61 -0
  310. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +318 -0
  311. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  312. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +155 -0
  313. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
  314. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
  315. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
  316. data/spec/spec/runner/formatter/story/html_formatter_spec.rb +135 -0
  317. data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +600 -0
  318. data/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb +82 -0
  319. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
  320. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +370 -0
  321. data/spec/spec/runner/heckle_runner_spec.rb +78 -0
  322. data/spec/spec/runner/heckler_spec.rb +13 -0
  323. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
  324. data/spec/spec/runner/option_parser_spec.rb +421 -0
  325. data/spec/spec/runner/options_spec.rb +450 -0
  326. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  327. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  328. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  329. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +62 -0
  330. data/spec/spec/runner/reporter_spec.rb +238 -0
  331. data/spec/spec/runner/resources/a_bar.rb +0 -0
  332. data/spec/spec/runner/resources/a_foo.rb +0 -0
  333. data/spec/spec/runner/resources/a_spec.rb +1 -0
  334. data/spec/spec/runner/spec.opts +2 -0
  335. data/spec/spec/runner/spec_drb.opts +1 -0
  336. data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
  337. data/spec/spec/runner/spec_parser_spec.rb +85 -0
  338. data/spec/spec/runner/spec_spaced.opts +2 -0
  339. data/spec/spec/runner_spec.rb +11 -0
  340. data/spec/spec/spec_classes.rb +133 -0
  341. data/spec/spec/story/builders.rb +46 -0
  342. data/spec/spec/story/extensions/main_spec.rb +161 -0
  343. data/spec/spec/story/extensions_spec.rb +14 -0
  344. data/spec/spec/story/given_scenario_spec.rb +27 -0
  345. data/spec/spec/story/runner/plain_text_story_runner_spec.rb +90 -0
  346. data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
  347. data/spec/spec/story/runner/scenario_runner_spec.rb +214 -0
  348. data/spec/spec/story/runner/story_mediator_spec.rb +143 -0
  349. data/spec/spec/story/runner/story_parser_spec.rb +401 -0
  350. data/spec/spec/story/runner/story_runner_spec.rb +294 -0
  351. data/spec/spec/story/runner_spec.rb +93 -0
  352. data/spec/spec/story/scenario_spec.rb +18 -0
  353. data/spec/spec/story/step_group_spec.rb +157 -0
  354. data/spec/spec/story/step_mother_spec.rb +84 -0
  355. data/spec/spec/story/step_spec.rb +272 -0
  356. data/spec/spec/story/story_helper.rb +2 -0
  357. data/spec/spec/story/story_spec.rb +84 -0
  358. data/spec/spec/story/world_spec.rb +423 -0
  359. data/spec/spec.opts +6 -0
  360. data/spec/spec_helper.rb +77 -0
  361. data/stories/all.rb +5 -0
  362. data/stories/configuration/before_blocks.story +21 -0
  363. data/stories/configuration/stories.rb +7 -0
  364. data/stories/example_groups/autogenerated_docstrings +45 -0
  365. data/stories/example_groups/example_group_with_should_methods +17 -0
  366. data/stories/example_groups/nested_groups +17 -0
  367. data/stories/example_groups/output +25 -0
  368. data/stories/example_groups/stories.rb +7 -0
  369. data/stories/helper.rb +6 -0
  370. data/stories/interop/examples_and_tests_together +30 -0
  371. data/stories/interop/stories.rb +7 -0
  372. data/stories/interop/test_case_with_should_methods +17 -0
  373. data/stories/mock_framework_integration/stories.rb +7 -0
  374. data/stories/mock_framework_integration/use_flexmock.story +9 -0
  375. data/stories/pending_stories/README +3 -0
  376. data/stories/resources/helpers/cmdline.rb +9 -0
  377. data/stories/resources/helpers/story_helper.rb +16 -0
  378. data/stories/resources/matchers/smart_match.rb +37 -0
  379. data/stories/resources/spec/before_blocks_example.rb +32 -0
  380. data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
  381. data/stories/resources/spec/simple_spec.rb +8 -0
  382. data/stories/resources/spec/spec_with_flexmock.rb +18 -0
  383. data/stories/resources/steps/running_rspec.rb +50 -0
  384. data/stories/resources/stories/failing_story.rb +15 -0
  385. data/stories/resources/test/spec_and_test_together.rb +57 -0
  386. data/stories/resources/test/test_case_with_should_methods.rb +30 -0
  387. data/stories/stories/multiline_steps.story +23 -0
  388. data/stories/stories/steps/multiline_steps.rb +13 -0
  389. data/stories/stories/stories.rb +6 -0
  390. data/story_server/prototype/javascripts/builder.js +136 -0
  391. data/story_server/prototype/javascripts/controls.js +972 -0
  392. data/story_server/prototype/javascripts/dragdrop.js +976 -0
  393. data/story_server/prototype/javascripts/effects.js +1117 -0
  394. data/story_server/prototype/javascripts/prototype.js +4140 -0
  395. data/story_server/prototype/javascripts/rspec.js +149 -0
  396. data/story_server/prototype/javascripts/scriptaculous.js +58 -0
  397. data/story_server/prototype/javascripts/slider.js +276 -0
  398. data/story_server/prototype/javascripts/sound.js +55 -0
  399. data/story_server/prototype/javascripts/unittest.js +568 -0
  400. data/story_server/prototype/lib/server.rb +24 -0
  401. data/story_server/prototype/stories.html +176 -0
  402. data/story_server/prototype/stylesheets/rspec.css +136 -0
  403. data/story_server/prototype/stylesheets/test.css +90 -0
  404. metadata +495 -0
@@ -0,0 +1,65 @@
1
+ require 'spec/runner/formatter/base_text_formatter'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ class NestedTextFormatter < BaseTextFormatter
7
+ attr_reader :previous_nested_example_groups
8
+ def initialize(options, where)
9
+ super
10
+ @previous_nested_example_groups = []
11
+ end
12
+
13
+ def add_example_group(example_group)
14
+ super
15
+
16
+ current_nested_example_groups = described_example_group_chain
17
+ current_nested_example_groups.each_with_index do |nested_example_group, i|
18
+ unless nested_example_group == previous_nested_example_groups[i]
19
+ output.puts "#{' ' * i}#{nested_example_group.description_args}"
20
+ end
21
+ end
22
+
23
+ @previous_nested_example_groups = described_example_group_chain
24
+ end
25
+
26
+ def example_failed(example, counter, failure)
27
+ message = if failure.expectation_not_met?
28
+ "#{current_indentation}#{example.description} (FAILED - #{counter})"
29
+ else
30
+ "#{current_indentation}#{example.description} (ERROR - #{counter})"
31
+ end
32
+
33
+ output.puts(failure.expectation_not_met? ? red(message) : magenta(message))
34
+ output.flush
35
+ end
36
+
37
+ def example_passed(example)
38
+ message = "#{current_indentation}#{example.description}"
39
+ output.puts green(message)
40
+ output.flush
41
+ end
42
+
43
+ def example_pending(example, message, pending_caller)
44
+ super
45
+ output.puts yellow("#{current_indentation}#{example.description} (PENDING: #{message})")
46
+ output.flush
47
+ end
48
+
49
+ def current_indentation
50
+ ' ' * previous_nested_example_groups.length
51
+ end
52
+
53
+ def described_example_group_chain
54
+ example_group_chain = []
55
+ example_group.__send__(:each_ancestor_example_group_class) do |example_group_class|
56
+ unless example_group_class.description_args.empty?
57
+ example_group_chain << example_group_class
58
+ end
59
+ end
60
+ example_group_chain
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec/runner/formatter/progress_bar_formatter'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ class ProfileFormatter < ProgressBarFormatter
7
+
8
+ def initialize(options, where)
9
+ super
10
+ @example_times = []
11
+ end
12
+
13
+ def start(count)
14
+ @output.puts "Profiling enabled."
15
+ end
16
+
17
+ def example_started(example)
18
+ @time = Time.now
19
+ end
20
+
21
+ def example_passed(example)
22
+ super
23
+ @example_times << [
24
+ example_group.description,
25
+ example.description,
26
+ Time.now - @time
27
+ ]
28
+ end
29
+
30
+ def start_dump
31
+ super
32
+ @output.puts "\n\nTop 10 slowest examples:\n"
33
+
34
+ @example_times = @example_times.sort_by do |description, example, time|
35
+ time
36
+ end.reverse
37
+
38
+ @example_times[0..9].each do |description, example, time|
39
+ @output.print red(sprintf("%.7f", time))
40
+ @output.puts " #{description} #{example}"
41
+ end
42
+ @output.flush
43
+ end
44
+
45
+ def method_missing(sym, *args)
46
+ # ignore
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec/runner/formatter/base_text_formatter'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ class ProgressBarFormatter < BaseTextFormatter
7
+ def example_failed(example, counter, failure)
8
+ @output.print colourise('F', failure)
9
+ @output.flush
10
+ end
11
+
12
+ def example_passed(example)
13
+ @output.print green('.')
14
+ @output.flush
15
+ end
16
+
17
+ def example_pending(example, message, pending_caller)
18
+ super
19
+ @output.print yellow('*')
20
+ @output.flush
21
+ end
22
+
23
+ def start_dump
24
+ @output.puts
25
+ @output.flush
26
+ end
27
+
28
+ def method_missing(sym, *args)
29
+ # ignore
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,52 @@
1
+ module Spec
2
+ module Runner
3
+ module Formatter
4
+ # This class extracts code snippets by looking at the backtrace of the passed error
5
+ class SnippetExtractor #:nodoc:
6
+ class NullConverter; def convert(code, pre); code; end; end #:nodoc:
7
+ begin; require 'rubygems'; require 'syntax/convertors/html'; @@converter = Syntax::Convertors::HTML.for_syntax "ruby"; rescue LoadError => e; @@converter = NullConverter.new; end
8
+
9
+ def snippet(error)
10
+ raw_code, line = snippet_for(error.backtrace[0])
11
+ highlighted = @@converter.convert(raw_code, false)
12
+ highlighted << "\n<span class=\"comment\"># gem install syntax to get syntax highlighting</span>" if @@converter.is_a?(NullConverter)
13
+ post_process(highlighted, line)
14
+ end
15
+
16
+ def snippet_for(error_line)
17
+ if error_line =~ /(.*):(\d+)/
18
+ file = $1
19
+ line = $2.to_i
20
+ [lines_around(file, line), line]
21
+ else
22
+ ["# Couldn't get snippet for #{error_line}", 1]
23
+ end
24
+ end
25
+
26
+ def lines_around(file, line)
27
+ if File.file?(file)
28
+ lines = File.open(file).read.split("\n")
29
+ min = [0, line-3].max
30
+ max = [line+1, lines.length-1].min
31
+ selected_lines = []
32
+ selected_lines.join("\n")
33
+ lines[min..max].join("\n")
34
+ else
35
+ "# Couldn't get snippet for #{file}"
36
+ end
37
+ end
38
+
39
+ def post_process(highlighted, offending_line)
40
+ new_lines = []
41
+ highlighted.split("\n").each_with_index do |line, i|
42
+ new_line = "<span class=\"linenum\">#{offending_line+i-2}</span>#{line}"
43
+ new_line = "<span class=\"offending\">#{new_line}</span>" if i == 2
44
+ new_lines << new_line
45
+ end
46
+ new_lines.join("\n")
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec/runner/formatter/base_text_formatter'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ class SpecdocFormatter < BaseTextFormatter
7
+ def add_example_group(example_group)
8
+ super
9
+ output.puts
10
+ output.puts example_group.description
11
+ output.flush
12
+ end
13
+
14
+ def example_failed(example, counter, failure)
15
+ message = if failure.expectation_not_met?
16
+ "- #{example.description} (FAILED - #{counter})"
17
+ else
18
+ "- #{example.description} (ERROR - #{counter})"
19
+ end
20
+
21
+ output.puts(failure.expectation_not_met? ? red(message) : magenta(message))
22
+ output.flush
23
+ end
24
+
25
+ def example_passed(example)
26
+ message = "- #{example.description}"
27
+ output.puts green(message)
28
+ output.flush
29
+ end
30
+
31
+ def example_pending(example, message, pending_caller)
32
+ super
33
+ output.puts yellow("- #{example.description} (PENDING: #{message})")
34
+ output.flush
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,174 @@
1
+ require 'erb'
2
+ require 'spec/runner/formatter/base_text_formatter'
3
+
4
+ module Spec
5
+ module Runner
6
+ module Formatter
7
+ module Story
8
+ class HtmlFormatter < BaseTextFormatter
9
+ include ERB::Util
10
+
11
+ def initialize(options, where)
12
+ super
13
+ @previous_type = nil
14
+ @scenario_text = ""
15
+ @story_text = ""
16
+ @scenario_failed = false
17
+ @story_failed = false
18
+ end
19
+
20
+ def run_started(count)
21
+ @output.puts <<-EOF
22
+ <?xml version="1.0" encoding="UTF-8"?>
23
+ <!DOCTYPE html
24
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
25
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
26
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
27
+ <head>
28
+ <title>Stories</title>
29
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
30
+ <meta http-equiv="Expires" content="-1" />
31
+ <meta http-equiv="Pragma" content="no-cache" />
32
+ <script src="javascripts/prototype.js" type="text/javascript"></script>
33
+ <script src="javascripts/scriptaculous.js" type="text/javascript"></script>
34
+ <script src="javascripts/rspec.js" type="text/javascript"></script>
35
+ <link href="stylesheets/rspec.css" rel="stylesheet" type="text/css" />
36
+ </head>
37
+ <body>
38
+ <div id="container">
39
+ EOF
40
+ end
41
+
42
+ def collected_steps(steps)
43
+ unless steps.empty?
44
+ @output.puts " <ul id=\"stock_steps\" style=\"display: none;\">"
45
+ steps.each do |step|
46
+ @output.puts " <li>#{step}</li>"
47
+ end
48
+ @output.puts " </ul>"
49
+ end
50
+ end
51
+
52
+ def run_ended
53
+ @output.puts <<-EOF
54
+ </div>
55
+ </body>
56
+ </head>
57
+ EOF
58
+ end
59
+
60
+ def story_started(title, narrative)
61
+ @story_failed = false
62
+ @story_text = <<-EOF
63
+ <dt>Story: #{h title}</dt>
64
+ <dd>
65
+ <p>
66
+ #{h(narrative).split("\n").join("<br />")}
67
+ </p>
68
+ EOF
69
+ end
70
+
71
+ def story_ended(title, narrative)
72
+ if @story_failed
73
+ @output.puts <<-EOF
74
+ <dl class="story failed">
75
+ EOF
76
+ else
77
+ @output.puts <<-EOF
78
+ <dl class="story passed">
79
+ EOF
80
+ end
81
+ @output.puts <<-EOF
82
+ #{@story_text}
83
+ </dd>
84
+ </dl>
85
+ EOF
86
+ end
87
+
88
+ def scenario_started(story_title, scenario_name)
89
+ @previous_type = nil
90
+ @scenario_failed = false
91
+ @scenario_text = <<-EOF
92
+ <dt>Scenario: #{h scenario_name}</dt>
93
+ <dd>
94
+ <ul class="steps">
95
+ EOF
96
+ end
97
+
98
+ def scenario_ended
99
+ if @scenario_failed
100
+ @story_text += <<-EOF
101
+ <dl class="failed">
102
+ EOF
103
+ else
104
+ @story_text += <<-EOF
105
+ <dl class="passed">
106
+ EOF
107
+ end
108
+
109
+ @story_text += <<-EOF
110
+ #{@scenario_text}
111
+ </ul>
112
+ </dd>
113
+ </dl>
114
+ EOF
115
+ end
116
+
117
+ def found_scenario(type, description)
118
+ end
119
+
120
+ def scenario_succeeded(story_title, scenario_name)
121
+ scenario_ended
122
+ end
123
+
124
+ def scenario_pending(story_title, scenario_name, reason)
125
+ scenario_ended
126
+ end
127
+
128
+ def scenario_failed(story_title, scenario_name, err)
129
+ @scenario_failed = true
130
+ @story_failed = true
131
+ scenario_ended
132
+ end
133
+
134
+ def step_upcoming(type, description, *args)
135
+ end
136
+
137
+ def step_succeeded(type, description, *args)
138
+ print_step('passed', type, description, *args) # TODO: uses succeeded CSS class
139
+ end
140
+
141
+ def step_pending(type, description, *args)
142
+ print_step('pending', type, description, *args)
143
+ end
144
+
145
+ def step_failed(type, description, *args)
146
+ print_step('failed', type, description, *args)
147
+ end
148
+
149
+ def print_step(klass, type, description, *args)
150
+ spans = args.map { |arg| "<span class=\"param\">#{arg}</span>" }
151
+ desc_string = description.step_name
152
+ arg_regexp = description.arg_regexp
153
+ inner = if(type == @previous_type)
154
+ "And "
155
+ else
156
+ "#{type.to_s.capitalize} "
157
+ end
158
+ i = -1
159
+ inner += desc_string.gsub(arg_regexp) { |param| spans[i+=1] }
160
+
161
+ @scenario_text += " <li class=\"#{klass}\">#{inner}</li>\n"
162
+
163
+ if type == :'given scenario'
164
+ @previous_type = :given
165
+ else
166
+ @previous_type = type
167
+ end
168
+
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,194 @@
1
+ require 'spec/runner/formatter/base_text_formatter'
2
+
3
+ module Spec
4
+ module Runner
5
+ module Formatter
6
+ module Story
7
+ class PlainTextFormatter < BaseTextFormatter
8
+ def initialize(options, where)
9
+ super
10
+ @successful_scenario_count = 0
11
+ @pending_scenario_count = 0
12
+
13
+ @pre_story_pending_count = 0
14
+ @pre_story_successful_count = 0
15
+
16
+ @failed_scenarios = []
17
+ @pending_steps = []
18
+ @previous_type = nil
19
+
20
+ @scenario_body_text = ""
21
+ @story_body_text = ""
22
+
23
+ @scenario_head_text = ""
24
+ @story_head_text = ""
25
+
26
+ @scenario_failed = false
27
+ @story_failed = false
28
+ end
29
+
30
+ def run_started(count)
31
+ @count = count
32
+ @output.puts "Running #@count scenarios\n\n"
33
+ end
34
+
35
+ def story_started(title, narrative)
36
+ @pre_story_pending_count = @pending_scenario_count
37
+ @pre_story_successful_count = @successful_scenario_count
38
+
39
+ @current_story_title = title
40
+ @story_failed = false
41
+ @story_body_text = ""
42
+ @story_head_text = "Story: #{title}\n\n"
43
+
44
+ narrative.each_line do |line|
45
+ @story_head_text += " "
46
+ @story_head_text += line
47
+ end
48
+ end
49
+
50
+ def story_ended(title, narrative)
51
+ if @story_failed
52
+ @output.print red(@story_head_text)
53
+ elsif @pre_story_successful_count == @successful_scenario_count &&
54
+ @pending_scenario_count >= @pre_story_pending_count
55
+ @output.print yellow(@story_head_text)
56
+ else
57
+ @output.print green(@story_head_text)
58
+ end
59
+ @output.print @story_body_text
60
+ @output.puts
61
+ @output.puts
62
+ end
63
+
64
+ def scenario_started(story_title, scenario_name)
65
+ @current_scenario_name = scenario_name
66
+ @scenario_already_failed = false
67
+ @scenario_head_text = "\n\n Scenario: #{scenario_name}"
68
+ @scenario_body_text = ""
69
+ @scenario_ok = true
70
+ @scenario_pending = false
71
+ @scenario_failed = false
72
+ end
73
+
74
+ def scenario_succeeded(story_title, scenario_name)
75
+ @successful_scenario_count += 1
76
+ scenario_ended
77
+ end
78
+
79
+ def scenario_failed(story_title, scenario_name, err)
80
+ @options.backtrace_tweaker.tweak_backtrace(err)
81
+ @failed_scenarios << [story_title, scenario_name, err] unless @scenario_already_failed
82
+ @scenario_already_failed = true
83
+ @story_failed = true
84
+ @scenario_failed = true
85
+ scenario_ended
86
+ end
87
+
88
+ def scenario_pending(story_title, scenario_name, msg)
89
+ @pending_scenario_count += 1 unless @scenario_already_failed
90
+ @scenario_pending = true
91
+ @scenario_already_failed = true
92
+ scenario_ended
93
+ end
94
+
95
+ def scenario_ended
96
+ if @scenario_failed
97
+ @story_body_text += red(@scenario_head_text)
98
+ elsif @scenario_pending
99
+ @story_body_text += yellow(@scenario_head_text)
100
+ else
101
+ @story_body_text += green(@scenario_head_text)
102
+ end
103
+ @story_body_text += @scenario_body_text
104
+ end
105
+
106
+ def run_ended
107
+ summary_text = "#@count scenarios: #@successful_scenario_count succeeded, #{@failed_scenarios.size} failed, #@pending_scenario_count pending"
108
+ if !@failed_scenarios.empty?
109
+ @output.puts red(summary_text)
110
+ elsif !@pending_steps.empty?
111
+ @output.puts yellow(summary_text)
112
+ else
113
+ @output.puts green(summary_text)
114
+ end
115
+ unless @pending_steps.empty?
116
+ @output.puts "\nPending Steps:"
117
+ @pending_steps.each_with_index do |pending, i|
118
+ story_name, scenario_name, msg = pending
119
+ @output.puts "#{i+1}) #{story_name} (#{scenario_name}): #{msg}"
120
+ end
121
+ end
122
+ unless @failed_scenarios.empty?
123
+ @output.print "\nFAILURES:"
124
+ @failed_scenarios.each_with_index do |failure, i|
125
+ title, scenario_name, err = failure
126
+ @output.print "\n #{i+1}) "
127
+ @output.print red("#{title} (#{scenario_name}) FAILED")
128
+ @output.print red("\n #{err.class}: #{err.message}")
129
+ @output.print "\n #{err.backtrace.join("\n")}\n"
130
+ end
131
+ end
132
+ end
133
+
134
+ def step_upcoming(type, description, *args)
135
+ end
136
+
137
+ def step_succeeded(type, description, *args)
138
+ found_step(type, description, false, false, *args)
139
+ end
140
+
141
+ def step_pending(type, description, *args)
142
+ found_step(type, description, false, true, *args)
143
+ @pending_steps << [@current_story_title, @current_scenario_name, description]
144
+ @scenario_body_text += yellow(" (PENDING)")
145
+ @scenario_pending = true
146
+ @scenario_ok = false
147
+ end
148
+
149
+ def step_failed(type, description, *args)
150
+ found_step(type, description, true, @scenario_pending, *args)
151
+ if @scenario_pending
152
+ @scenario_body_text += yellow(" (SKIPPED)")
153
+ else
154
+ @scenario_body_text += red(@scenario_ok ? " (FAILED)" : " (SKIPPED)")
155
+ end
156
+ @scenario_ok = false
157
+ end
158
+
159
+ def collected_steps(steps)
160
+ end
161
+
162
+ def method_missing(sym, *args, &block) #:nodoc:
163
+ # noop - ignore unknown messages
164
+ end
165
+
166
+ private
167
+
168
+ def found_step(type, description, failed, pending, *args)
169
+ desc_string = description.step_name
170
+ arg_regexp = description.arg_regexp
171
+ text = if(type == @previous_type)
172
+ "\n And "
173
+ else
174
+ "\n\n #{type.to_s.capitalize} "
175
+ end
176
+ i = -1
177
+ text << desc_string.gsub(arg_regexp) { |param| args[i+=1] }
178
+ if pending
179
+ @scenario_body_text += yellow(text)
180
+ else
181
+ @scenario_body_text += (failed ? red(text) : green(text))
182
+ end
183
+
184
+ if type == :'given scenario'
185
+ @previous_type = :given
186
+ else
187
+ @previous_type = type
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end